package ScalaStudy.chapter02

object Test08_DateTypeConversion {
  def main(args: Array[String]): Unit = {
    //  （1）	自动提升原则：有多种类型的数据混合运算时，系统首先自动将所有数据转换成精度大的那种数据类型，然后再进行计算。
    val a1:Byte = 10
    val b1:Long = 2353L
    val result1:Long = a1 + b1            //Long的精度最大，所以不会有问题
    val result2:Int  = (a1 + b1.toInt)


    //  （2）	把精度大的数值类型赋值给精度小的数值类型时，就会报错，反之就会进行自动类型转换。
    val a2:Byte = 10
    val b2:Int  = a2                       //精度小的赋值给精度大的
//    val c2:Byte = b2                     //精度大的赋值给精度小的，error


    //  （3）（byte，short）和 char 之间不会相互自动转换。
    val a3: Byte = 10
    val b3: Char = 'b'                    //char和Byte之间不可以互相转换
    val c3: Byte = b3.toByte


    //  （4）byte，short，char 他们三者可以计算，在计算时首先转换为 int 类型。
    val a4: Byte = 12
    val b4: Short = 25
    val c4: Char = 'c'
    val result4: Int = a4 + b4            //一定先转换成Int
    val result44: Int = a4 + b4 + c4      //一定先转换成Int


    ///////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////   强制类型转换  //////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////


//    （1）	将数据由高精度转换为低精度，就需要使用到强制转换
    val n1: Int = 2.5.toInt
    println("n1:" + n1)


//    （2）	强转符号只针对于最近的操作数有效，往往会使用小括号提升优先级
    val n2: Int = (2.6 + 3.7).toInt
    println("n2:" + n2)

//    （3）	数值和String类型转换

    //1、数值转String
    val n: Int = 27
    val s: String = n + ""
    println("s:" + s)

    //2、数值转String
    val m: Int = "12".toInt
    println("m:" + m)

    val f: Float = "12.3".toFloat
    println("f:" + f)

    val f2: Float = "12.3".toDouble.toInt
    println("f2:" + f2)

    ///////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////   面试题  ////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////////

    val p: Int = 130                            //-128 + 2 = -126
    val b9: Byte = p.toByte
    println("b9:" + b9)

  }
}
